import java.util.function.Function;

/*
Function<T,R> : 常用的两个方法
    R  apply (T t) : 将此函数应用于给定的参数
    default <V> Function andThen (Function after ) : 返回一个组合函数，首先将该函数应用于输入，然后after函数应用于结果
    Function <T , R> 接口通常用于对参数进行处理，转换(处理逻辑由Lambda表达式实现)，然后返回一个新的值
 */
public class FunctionDemo1 {
    public static void main(String[] args) {
        convert1("666",str-> Integer.parseInt(str));
        //convert1("666", Integer::parseInt);
        convert2(666,i-> String.valueOf(i + 330));
        convert3("440",s->Integer.parseInt(s),i-> String.valueOf(i + 330));
        //convert3("440",s->String.valueOf(Integer.parseInt(s) + 330));
    }

    //定义一个方法，把一个字符串转换为int类型，在控制台输出
    private static void convert1(String str, Function<String,Integer> fun){
        System.out.println(fun.apply(str));
    }
    //定义一个方法，把一个int类型的数据加上一个整数之后，转为字符串在控制台输出
    private static void convert2(int i, Function<Integer,String> fun){
        System.out.println(fun.apply(i));
    }

    //定义一个方法，把一个字符串转换为int类型，把int类型数据加上一个整数之后，转换为字符串在控制台输出
    private static void convert3(String s,Function<String,Integer> fun1,Function<Integer,String> fun2){
    //private static void convert3(String s,Function<String,String> fun){
        System.out.println(fun1.andThen(fun2).apply(s));
    }
}
